PHP8.3.6をmacOS Sonomaにphpenvでインストールする
以下で解決してくださってた......感謝や🙏
macOS に phpenv で PHP 8.3.7 以降をインストールできない場合の対処法 - zenn.dev
要はicu4c 59+以上ではC++11でのビルドが必要だから CXXFLAGS="-std=c++11"を指定されてしまってるから起きてた問題で、とはいえPHP側としてはext-intlをビルドするのにC++17が必要やで〜〜って言ってるんですよね。何が正しいんや......
https://github.com/php-build/php-build/blob/338efe357a3a695268f56d9aebd4e6a407a5d43e/bin/php-build#L726-L732
*
最新の8.3.6をインストールしようと思ったんですが、試行錯誤してると以下のようなエラーで手詰まりになってしまう。
code:console
configure: error: *** A compiler with support for C++17 language features is required.
これ、8.3.6でconfigureをする中でicuに関する各種バージョンチェックを行う箇所に修正が入ったようなんですが、そのチェック処理にバグがあってicuがC++17を必要としたバージョンでなくてもC++17対応しているgccを必要としてしまっているらしいです。
cf. Fix check for newer versions of ICU by NattyNarwhal · Pull Request #14186 · php/php-src · GitHub
(とはいえ、そもそもmacOS Sonomaに入ってるgccは当然C++17に対応しているはずなんですけど、configureした際に「対応してねえけど」って言われるんですよねえ......なんでなんだろ)
20240527時点では上記がfixされたバージョンは配信されていなかったので、取り急ぎ8.3.6をインストールしてみます。
最初にmacOSプリセットのgrepだと使えないオプションをphp-buildが使ってるみたいだったので、HomebrewでGNU grepを導入します。
code:shell
brew install grep
# こうすると今後もshellでGNU grepを使うようになるけど、そうしたくない場合はPATH="/opt/homebrew/opt/grep/libexec/gnubin:$PATH"をインストールコマンドの前に追記しておけばよい
echo 'PATH="/opt/homebrew/opt/grep/libexec/gnubin:$PATH"' >> ~/.zprofile
で、Homebrewでautoconfと依存パッケージを導入しつつ、phpenvを使ってインストールする。依存パッケージは不要なものは取り除いたり、他に必要なもの(libpngとか)があればphp.netのドキュメントを参照しつつ似たかんじに追記してあげるとよい。......とはいえ、libpngに限ってはプリセットで解決できるようになってたっぽいし、php -iでlibpngのバージョン見てみたけど今回はHomebrewのと同じだった。まあプリセットのlibpngに何か問題がある場合じゃなければ対応不要かな。
code:shell
brew install autoconf libjpeg zlib bzip2 curl libiconv libedit libzip openssl@1.1 oniguruma tidy-html5
PHP_BUILD_CONFIGURE_OPTS="--with-jpeg --with-zlib-dir=$(brew --prefix zlib) --with-bz2=$(brew --prefix bzip2) --with-curl=$(brew --prefix curl) --with-iconv=$(brew --prefix libiconv) --with-libedit --with-zip=$(brew --prefix libzip) --with-openssl=$(brew --prefix openssl@1.1) --with-tidy=$(brew --prefix tidy-html5)" PKG_CONFIG_PATH="$(brew --prefix icu4c)/lib/pkgconfig:$(brew --prefix libjpeg)/lib/pkgconfig:$(brew --prefix oniguruma)/lib/pkgconfig:$(brew --prefix libedit)/lib/pkgconfig" phpenv install 8.3.6
いくつかのライブラリはpkg-config経由で読ませないとうまく指定できなかったけど、Homebrewでインストールしたライブラリにlib/pkgconfig/ってディレクトリがあるならそっちを読ませた方がよしなにしてくれそう。
(まあライブラリを参照するという目的だけならどっちでやってもよいんだろな〜〜とはいえよいことを覚えた💡)
手元で見る限りだと、bzip2とlibiconv以外には存在してた。なんかtidyだけうまく出来なかったけど、以下のようなコマンドでも実行することはできた。
code:shell
PHP_BUILD_CONFIGURE_OPTS="--with-jpeg --with-zlib --with-bz2=$(brew --prefix bzip2) --with-curl --with-iconv=$(brew --prefix libiconv) --with-libedit --with-zip --with-openssl --with-tidy=$(brew --prefix tidy-html5)" PKG_CONFIG_PATH="$(brew --prefix icu4c)/lib/pkgconfig:$(brew --prefix libjpeg)/lib/pkgconfig:$(brew --prefix zlib)/lib/pkgconfig:$(brew --prefix curl)/lib/pkgconfig:$(brew --prefix oniguruma)/lib/pkgconfig:$(brew --prefix libedit)/lib/pkgconfig:$(brew --prefix libzip)/lib/pkgconfig:$(brew --prefix openssl@1.1)/lib/pkgconfig" phpenv install 8.3.6
参考
PHP8.1.1をmacOS BigSurにphpenvでインストールする
PHP8.0.9をmacOS BigSurにphpenvでインストールする
PHP7.4.2をmacOS Catalinaにphpenvでインストールする
PHP7.1.33をmacOS BigSurにphpenvでインストールする
PHP 8.2.19 compile requires C++17? : r/PHP
MacOS に anyenv + phpenv で PHP 7.4.1 をインストールする #PHP - Qiita
anyenv + phpenvでPHP8をインストールした作業メモ - zenn.dev
php7.4-apacheイメージのビルド時に "No package 'oniguruma' found" エラーが発生する際の対処 #Docker - Qiita
phpenv install でエラーが出るときの対処メモ - zenn.dev
php 8.2 を Intel Mac にインストールしたときのエラー対応 - zenn.dev
#Techlog #PHP #phpenv #macOS_Sonoma #pkg-config